游戏开发
Lua 热更新 标签描述

一:算数运算符 注意Lua中没有+=,-=,这些运算符+:加-:减:乘/:除 %:余^:幂-:负Lua中没有float,double等类型,所有数字都是number类型,所以计算所得数字是多少就是多少 Lua中+只能用作数字计算,不能用作字符串连接  二:关系运算符 :等于=:不等于>=:大于等于<=:小于等于>:大于<:小于 三:逻辑运算符 and:逻辑与or:逻辑或not:逻辑非 Lua中没有三目运算符,但是可以利用函数的传值特性模拟出三目运算符:这样写比较麻烦,可以利用and与or的短路特点将Lua中的三目表达式写为这样resu...

  gEMN1CQh1PXt   2023年11月12日   35   0   0 Lua 热更新热更新

一:while循环(C的while循环) 二:for循环(C的for循环) ——数值for循环 Lua中的for循环三个表达式在循环开始前一次性求值,以后不再进行求值:下面的循环程序的三个表达式在一开始就赋了值并且之后不会被修改,i改变任何值都是执行10次循环,i修改的值只会影响内部的值   ——泛型for循环(使用Lua中的迭代器函数pairs与ipairs,类似于foreach) 三:repeat-until循环(C的do-while循环) 四:嵌套循环 一个小例子: Lua中没有continue只有break,可以用break跳出循环,在嵌套循环中brea...

  gEMN1CQh1PXt   2023年11月12日   45   0   0 Lua 热更新热更新

一:字符串操作 所有的字符串操作都会返回一个新的字符串,不会对原有的字符串有影响 ——string.upper:将所有字母转换为大写 ——string.lower:将所有字母转换为小写 ——string.gsub:替换字符串 ——string.find:查找字符串返回值是两个number类型的值,所查找到字符串的起始位置与结束位置(返回值可以为nil) ——string.reverse:反转字符串 ——string.char:将整型数字转换为字符串 ——string.byte:将字符串转换为数字 ——string.len:计算字符串长度计算的是字节长度(一个中文字符占两个字节) ——...

  gEMN1CQh1PXt   2023年11月12日   28   0   0 Lua 热更新热更新

一:函数的定义 在Lua中函数是一个数据类型! 二:函数的特性 ——函数可以当作一个变量作为数据赋值:将myfun作为数据变量传递给fun1,fun1函数就有了与myfun函数相同的功能 ——函数可以作为参数传递(类似于C中的委托与事件):将myPrint函数当做参数传递给add函数的fun参数 ——函数可以定义为匿名函数      ——函数可以返回多个值 三:函数的可变参数 将函数参数写为三个点,则当前参数为可变参数:Lua会把可变参数当作一个以数组方式存储数据的表,表的名字叫arg,arg中保存着参数的键和值以及参数个数如果想要遍...

  gEMN1CQh1PXt   2023年11月12日   38   0   0 Lua 热更新热更新

一:创建表 在Lua中,表的创建是通过构造表达式来完成——最简单的表是{},用来创建一个空表——也可以像创建字典一下初始化一个表——也可以像创建数组一样初始化一个表 表的索引可以是数字或字符串: 二:访问元素 ——用键值对方式初始化的表用点或者用中括号(中括号里面必须是字符串)去访问——用数组方式初始化的表直接用索引下标访问就可以(Lua中的索引下标默认是从1开始,索引可以为负数) 表与列表,字典等一样不固定长度大小,可以增添,删除,修改元素注意:增添元素与删除元素都不会改变索引下标,而插入元素和移除元素会改变索引下标 三:增添元素 四:修改元素 五:删除元素 ...

  gEMN1CQh1PXt   2023年11月12日   27   0   0 Lua 热更新热更新

Lua中没有数组这种类型,是利用表这种数据类型去实现的数组,但是与C的数组不同,Lua中用表实现的数组是可扩展的,可动态修改 一:声明数组 ——普通声明用数组的方式声明一个表就是声明一个数组 ——动态声明 动态声明可以声明索引为负数的数组(Lua中的索引下标默认是从1开始的,也可以为负数) 二:遍历数组 注意遍历多维数组时,第一维不能为nil <!-本文包含:- <!--

  gEMN1CQh1PXt   2023年11月12日   29   0   0 Lua 热更新热更新

Lua中的模块就是一个封装库,类似于C的命名空间,可以把公有的变量和方法放在一个文件中,以API接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度 一:模块的定义 两种定义模块中函数的形式,可以用匿名函数定义也可以用普通函数定义 二:模块的使用(require) 我个人理解引入模块就是引入一个类,引入这个模块(类)之后就可以使用这个模块(类)中的全局变量和全局函数例如在一个文件名为moduletext的lua文件中引入模块的文件名不区分大小写&nbsp; 引入模块时还可以用一个变量去接收,这个变量相当于是引入模块中的返回值使用此方法时,模块文件的模块名与返回值必须一致 ...

  gEMN1CQh1PXt   2023年11月12日   33   0   0 Lua 热更新热更新

一:Lua中内置的迭代函数 ——pairs ——ipairs ——pairs与ipairs的区别1.pairs既能遍历数组形式的表也能遍历键值对形式的表,ipairs只能遍历数组形式的表&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 2.pairs会遍历所有不为nil的元素(如果遇到nil则跳过当前元素继续遍历下一个),ipairs从索引1开始遍历遇到nil则停止遍历&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 遍历时先遍历整型数字的键,再遍历字符串的键(其实内部本身是根据Hash值来排序的,而Hash值本身就是随机排...

  gEMN1CQh1PXt   2023年11月12日   25   0   0 Lua 热更新热更新

一:什么是Lua? Lua是一种轻量小巧的脚本语言,它由标准的C语言编写并且是开源的,可以很方便的和其他程序进行集成和扩展(C,Java.....),其设计目的是为了嵌入应用程序中,为应用程序提供灵活的扩展和定制功能。 一般来讲Lua不能单独用于一款游戏的开发,因此对于一个Unity项目,一般先用C进行开发,后续的热更新再通过Lua来完成,从这里可以知道两点: Lua语言的目的是嵌入式,一般用于为其他语言开发出来的项目进行功能的扩展和补丁的更新 在最开始使用其它语言进行项目开发的时候,需要预留与Lua代码的“交互接口” 二:为什么要使用Lua 在玩任意一款手游的时候,一般来讲客户端...

  gEMN1CQh1PXt   2023年11月02日   21   0   0 Lua 热更新热更新

一:局部变量与全局变量 使用do-end可以创建一个语句块(相当于C中的花括号{}) 默认声明的变量都是全局变量(即使在函数内,在语句块内声明也是全局变量)局部变量需要在声明前加上关键字local全局变量的销毁是在文件运行结束时,局部变量的销毁是在所在语句块结束时 全局变量与局部变量的生命周期:因为一开始声明的a是全局变量它的销毁是在文件运行结束时,所以当局部变量覆盖全局变量时全局变量的值并没有销毁,当局部变量销毁时a又赋予了之前全局变量的值 二:多变量同时赋值 Lua中可以直接交换多个变量的值:与常见编程语言中的交换值不同,Lua中交换时先计算出等号右边所有的值,再赋值给...

  gEMN1CQh1PXt   2023年11月02日   27   0   0 Lua 热更新热更新

一:什么是元表 元表是经过普通表扩展的表,使得扩展一些功能更加方便在Lua中我们可以访问到表的键和值,然后对他们进行操作,但是无法对两个表直接进行操作,假如我们想直接对两个表进行相加,使用元表可以拓展功能 二:设置元表 setmetatable返回值为普通表 两种设置的方法: 三:得到元表 getmetatable返回值为元表 四:元方法 元方法就是元表中的键 ——__index1.当__index对应一个函数函数参数是与元表相关联的普通表和不存在的键。当访问了一个不存在的键(索引)时,就会调用__index对应的方法这个函数默认有一个返回值,如果我们不定义这个返回值,当访问了...

  gEMN1CQh1PXt   2023年11月02日   44   0   0 Lua 热更新热更新

一:协程与线程的区别 在Lua里,最主要的线程是协同程序(coroutine),它跟线程差不多,拥有自己独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停 二:什么是协程 协程和线程都是针对于函数来说的,一个函数的正常执行步骤是执行完此函数的所有代码再继续执行下面的代码但是协程可以让函数在某一步暂停(暂停也称为挂起),在挂起的地方先暂停函数去执行函数外的代码,然后在需要的时候让没有执行的代码继续执行 三:定义协程 ——corouti...

  gEMN1CQh1PXt   2023年11月02日   32   0   0 Lua 热更新热更新

Lua并不是一个支持面向对象的语言,没有类的概念,但是可以间接地去实现面向对象的功能对象是由属性+方法组成,Lua中最基本的结构是table,我们可以用table来描述对象的属性,function函数用来表示方法,所以Lua中的面向对象是通过table+function模拟出来的 一:实现Lua中类的概念 下面是Lua模拟出的面向对象的例子:对象由属于和方法组成(下面的person表中有属性有方法) &nbsp; 但是这样存在一些问题!!!!!————第一个问题:Lua中的表是一个引用类型,将person表赋值给a相当于person与a引用了同一块内存空间,因为内存空间的销毁是当它的...

  gEMN1CQh1PXt   2023年11月02日   30   0   0 Lua 热更新热更新

一:错误处理 错误处理分为两大部分——语法错误&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; ——运行错误 &nbsp; 错误处理的函数:assert函数assert函数先检查第一个参数若为true,则不做任何输出若为false,则把第二个参数作为错误信息输出 &nbsp;二:垃圾回收 在Lua中利用一个垃圾收集器来收集所有死对象(访问不到的对象),垃圾收集器的实现利用了一个叫增量标记-扫描收集器的东西,它使用两个数字来控制垃圾收集循环:垃圾收集器间歇率和垃圾收集器步进倍率,这两个数字都使用百分数为单位。垃圾收集器间歇率控制着垃圾收集器多长时间后开启一次收集工作,...

  gEMN1CQh1PXt   2023年11月02日   43   0   0 Lua 热更新热更新

一:文件中的输入与输出 读取一个文件,变量赋值等都是输入(input)将一个文件的内容写到另一个文件中,就是输出(output) 二:文件读取模式介绍 r:只读方式打开文件,该文件必须存在w:只写方式打开文件,若文件存在则写入的内容会覆盖原先所有内容,若文件不存在则建立该文件a:只写方式打开文件,若文件存在则写入的内容会附加到原先的文件尾,若文件不存在则建立该文件r+:可读可写方式打开文件,该文件必须存在w+:可读可写方式打开文件,若文件存在则写入的内容会覆盖原先所有内容,若文件不存在则建立该文件a+:可读可写方式打开文件,若文件存在则写入的内容会附加到原先的文件尾,若文件不存在则建立...

  gEMN1CQh1PXt   2023年11月02日   25   0   0 Lua 热更新热更新

一:什么是热更新? 热更新是指当游戏出现bug,或者需要修改,增加某个功能的时候,我们不需要重新下载安装包,就可以更新游戏内容游戏上线后,遇见bug或者需要更新内容,一般有两种做法:第一种:重新打包上传一个新的安装包到应用商店(需要审核,费时间),然后让玩家下载新的客户端安装包(需要重新下载,费流量)第二种:在游戏内更新,游戏启动时去下载需要更新的资源第一种我们一般称为游戏大版本更新,第二种称为热更新例如一个用Unity制作的游戏,脚本是用C编写的,现在游戏中有一个地方的数值需要修改,也许只有几KB,但是因为是用的C语言(必须重新编译为dll文件才可以,不能在移动平台直接替换)所以必须重...

  gEMN1CQh1PXt   2023年11月02日   39   0   0 Lua 热更新热更新

xLua没有官网,需要在GitHub上下载:https://github.com/Tencent/xLua下载完成后解压文件,其实xLua本质就是一个Unity工程,把Asset中的文件导入到Unity工程中就搞定了&nbsp;&nbsp;&nbsp; Plugins文件夹下是各种运行的平台配置文件等等,一般不需要查看xLua文件夹下是教程,源码,示例等等 ——如果遇到一些问题可以从官方的faq文档中寻找 &nbsp; &nbsp; <!-本文包含:- <!--

  gEMN1CQh1PXt   2023年11月02日   78   0   0 Lua 热更新热更新

一:使用xLua的步骤 ——导入xLua插件其实xLua本质就是一个Unity工程,把Asset中的文件导入到Unity工程中就搞定了(导入之后编辑器菜单栏会扩展出一个XLua选项) &nbsp; ——添加宏File——BuildSettings——PlayerSettings——OtherSettings——ScriptsingDefineSymbols——输入HOTFIX_ENABLE——按下Enter检测添加是否成功:选择之前菜单栏的XLua选项,发现多出了一个HotfixInjectInEditor选项 &nbsp; ——重新生成代码&amp;重新注入代码每当CS代码发生修改时,...

  gEMN1CQh1PXt   2023年11月02日   37   0   0 Lua 热更新热更新

一:if判断 二:if-else判断 三:if-elseif判断 elseif中间没有空格 <!-本文包含:- <!--

  gEMN1CQh1PXt   2023年11月12日   48   0   0 Lua 热更新热更新

一:Lua的语法规则 ——语句结尾的分号可加可不加 ——C中需要声明类和方法去执行语句,而Lua中不需要声明类和方法就可以直接执行语句(Lua轻量小巧简单) ——与C不同,Lua中的任何参数都不能声明类型,只需要声明变量名就可以 二:Lua的注释 ——单行注释&nbsp; ——多行注释&nbsp; 多行注释与单行注释之间的转换技巧:将多行注释的开头添加一个-,则第一行和最后一行都变成了单行注释 三:Lua的标识符规则 ——只能由数字字母和下划线组成,以字母和下划线开头——最好不要使用下划线+大写字母(_MyVar)的标识符,Lua中有些保留字也是这样的——Lua与C一样区分大小写...

  gEMN1CQh1PXt   2023年11月12日   33   0   0 Lua 热更新热更新